MongoDB·入门

##何为 NoSql

NoSQL(NoSQL = Not Only SQL )

  • 为什么使用NoSQL 强项:

      1.对数据库高并发读写。
      
      2.对海量数据的高效率存储和访问。
      
      3.对数据库的高可扩展性和高可用性。
    
  • 弱项:

      1.数据库事务一致性需求
      
      2.数据库的写实时性和读实时性需求
      
      3.对复杂的SQL查询,特别是多表关联查询的需求
    

NoSQL四大类

1.key-value存储

Examples Redis, Tokyo Cabinet/Tyrant, Tair
典型应用场景 内容缓存,主要用于处理大量数据的高访问负载。
数据模型 Key 指向 Value 的键值对,通常用hash table来实现
强项 查找速度快
弱项 数据无结构化(或弱结构),通常只被当作字符串或者二进制数据

2.列式数据库

Examples Cassandra HBase Riak SybaseIQ
典型应用场景 分布式的文件系统、大数据分析。
数据模型 以列簇式存储,将同一列数据存在一起
强项 查找速度快,可扩展性强,更容易进行分布式扩展
弱项 功能相对局限

3.文档型数据库

Examples MongoDb,CouchDB
典型应用场景 Web应用(Value是结构化的,数据库能够了解Value的内容)
数据模型 Key-Value对应的键值对,Value为结构化文档数据
强项 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
弱项 相比其他NoSql查询性能不高,而且缺乏统一的查询语法

4.图结构数据库

Examples Neo4J, InfoGrid, Infinite Graph
典型应用场景 社交网络,推荐系统等。专注于构建关系图谱
数据模型 图结构
强项 利用图结构相关算法。比如最短路径寻址,N度关系查找等
弱项 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案

MongoDB简介

简介

Mongo 是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。MongoDB使用C++开发。不支持SQL,但有自己功能强大的查询语法。MongoDB使用BSON作为数据存储和传输的格式。BSON是一种类似JSON的二进制序列化文档。MongoDB很像MySQL,是最像关系型数据库的NoSql。

  • 字段对应关系
MySQL term Mongo term/conceptp
database database
table collection
index index
row BSON document
column BSON field
join embedding and linking
primary key _id field
group by aggregation

特点

  • 高性能、易部署、易使用,存储数据非常方便。
  • 面向集合存储,易存储对象类型的数据
  • 模式自由
  • 支持动态查询
  • 支持完全索引,包含内部对象。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序
  • 文件存储格式为BSON(一种JSON的扩展)

功能

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:MongoDB 支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。MongoDB的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:MongoDB包含一系列监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:MongoDB数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群。

适用场合

  • 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 大数据量,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。